package simonby.top.annualring.domain.repository;

import simonby.top.annualring.domain.model.UserFamily;
import java.util.List;
import java.util.Optional;

/**
 * 用户家族关联仓储接口
 * 定义用户与家族关联关系的数据访问操作
 */
public interface UserFamilyRepository {
    /**
     * 保存用户家族关联关系
     * @param userFamily 用户家族关联实体
     * @return 保存后的关联关系
     */
    UserFamily save(UserFamily userFamily);

    /**
     * 根据ID查找用户家族关联关系
     * @param id 关联ID
     * @return 用户家族关联对象
     */
    Optional<UserFamily> findById(Long id);

    /**
     * 根据用户ID查找关联的家族树
     * @param userId 用户ID
     * @return 用户家族关联列表
     */
    List<UserFamily> findByUserId(Long userId);

    /**
     * 根据家族树ID查找关联的用户
     * @param familyTreeId 家族树ID
     * @return 用户家族关联列表
     */
    List<UserFamily> findByFamilyTreeId(Long familyTreeId);

    /**
     * 查找所有用户家族关联关系
     * @return 用户家族关联列表
     */
    List<UserFamily> findAll();

    /**
     * 删除用户家族关联关系
     * @param id 关联ID
     */
    void deleteById(Long id);

    /**
     * 根据用户ID和家族树ID查找关联关系
     * @param userId 用户ID
     * @param familyTreeId 家族树ID
     * @return 用户家族关联对象
     */
    Optional<UserFamily> findByUserIdAndFamilyTreeId(Long userId, Long familyTreeId);
}